Nell'accelerazione GPU, dobbiamo abbandonare la mentalità "calcolo prima di tutto". Le prestazioni moderne sono determinate da Gestione della memoria: l'organizzazione dell'allocazione, della sincronizzazione e dell'ottimizzazione dei dati tra l'host (CPU) e il dispositivo (GPU).
1. La disparità tra memoria e calcolo
Mentre il rendimento aritmetico della GPU ($TFLOPS$) è aumentato esponenzialmente, la larghezza di banda della memoria ($GB/s$) è cresciuta a un ritmo molto più lento. Ciò crea una lacuna in cui le unità di esecuzione spesso si trovano "in carestia", in attesa che i dati arrivino dalla VRAM. Di conseguenza, la programmazione GPU è spesso programmazione della memoria.
2. Il modello Roofline
Questo modello visualizza la relazione tra Intensità aritmetica (FLOPs/byte) e prestazioni. Le applicazioni si dividono tipicamente in due categorie:
- Limitata dalla larghezza di banda: Limitata dalla larghezza di banda (la pendenza ripida).
- Limitata dal calcolo: Limitata dai picchi di TFLOPS (il tetto orizzontale).
3. L'imposta del movimento dei dati
Il principale collo di bottiglia delle prestazioni raramente è il calcolo matematico; è la latenza e il costo energetico nel trasferire un byte attraverso il bus PCIe o dall'HBM. Il codice ad alte prestazioni privilegia la permanenza dei dati e riduce al minimo i trasferimenti tra host e dispositivo.